package com.bigdata.utils;

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 将模拟生成的数据，以HTTP，POST请求的方式发送到指定的URL
 */
public class RequestProcess {

    /**
     * 以POST的方式，对指定的URL发送数据：
     * 发送日志到指定的URL路径：http://logserver:8888/log?log={log}
     * @param log 启动日志，事件日志
     */
    public static void sendLogByAsynchronousRequest (String log) {
        try{
            /**
             * 1. 构建URL对象，指定请求路径：
             * 注意：不同的日志类型对应不同的URL
             *  在本地测试时，配置映射：
             *  127.0.0.1 uzest
             *  在生产环境测试时，配置映射
             *  192.168.100.101 uzest
             *
             * 注意：把不用的映射要注释
             */
            // 1）没有使用nginx做负载均衡使用
            //URL url  =new URL("http://uzest:8888/log");

            // 2）使用nginx做负载均衡使用：nginx服务端口默认80
            URL url  =new URL("http://uzest/log");

            /**
             * 2. 获取URL连接：
             */
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            /**
             * 3. 设置请求方式为post
             */
            conn.setRequestMethod("POST");

            /**
             * 4. 时间头用来供server进行时钟校对的
             */
            conn.setRequestProperty("clientTime" , System.currentTimeMillis() + "");

            /**
             * 5. 允许上传数据
             */
            conn.setDoOutput(true);

            /**
             * 6. 设置请求的头信息,设置内容类型为JSON
             *  application/x-www-form-urlencoded ： 表单类型数据
             */
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            /**
             * 7. 测试上传数据
             */
            //upload{"area":"shanghai","uid":"192","os":"ios","ch":"appstore","appid":"gmall","mid":"mid_47","type":"startup","vs":"1.2.0"}
            //upload{"area":"shanghai","uid":"192","itemid":18,"npgid":17,"evid":"addCart","os":"ios","pgid":25,"appid":"gmall","mid":"mid_47","type":"event"}
            System.out.println("userBehavior" + log);

            /**
             * 8. 构建输出流，往指定的URL中发送请求数据
             */
            OutputStream out = conn.getOutputStream();
            //参数格式：log={log}
            String jsonLog = "log=" + log;
            //格式：http://uzest:8888/log?log={log}
            out.write(jsonLog.getBytes());
            out.flush();
            out.close();

            /**
             * 9. 获取响应码
             */
            int code = conn.getResponseCode();
            System.out.println("响应码 : " + code);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}
